/*
 * Copyright 2008 the Breachwalls OSS project and the Others.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */
package com.breachwalls.mogen.generator.template;

import java.io.File;

import com.breachwalls.mogen.model.Model;
import com.breachwalls.mogen.model.ModelType;

/**
 * Freemarkerのテンプレートを使用したデータタイプモデルテンプレート.
 * @author todoken
 * @version $Revision: 31 $
 */
public class FreeMarkerDatatypeModelTemplate extends ModelTemplateSupport {

    /**
     * シリアルバージョンID.
     */
    private static final long serialVersionUID = 1L;

    /**
     * コンストラクタ.
     * @param base ファイル出力先ベースディレクトリ
     * @param model 自動生成するモデルの情報
     */
    public FreeMarkerDatatypeModelTemplate(final File base, final Model model) {
        super(base, model);
        addGenerateFile(model.getShortClassName() + ".java", "datatype/datatype.ftl");
        if (!model.isAbstractClass()) {
            addGenerateFile(getGenerateFactoryClassName() + ".java", "datatype/datatype-factory.ftl");
            addGenerateFile(getGenerateEditorClassName() + ".java", "datatype/datatype-editor.ftl");
        }
    }

    /**
     * 自動生成するクラスが数値型データタイプクラスであるかチェックする.
     * @return 自動生成するクラスが数値型データタイプクラスの場合、TRUEを返す
     */
    public boolean isDecimal() {
        final ModelType m = getModel().getModelType();
        return m == ModelType.DECIMAL;
    }

    /**
     * 自動生成するクラスが日時型データタイプクラスであるかチェックする.
     * @return 自動生成するクラスが日時型データタイプクラスの場合、TRUEを返す
     */
    public boolean isDateTime() {
        final ModelType m = getModel().getModelType();
        return m == ModelType.DATETIME;
    }

    /**
     * 自動生成するクラスが文字列型データタイプクラスであるかチェックする.
     * @return 自動生成するクラスが文字列型データタイプクラスの場合、TRUEを返す
     */
    public boolean isString() {
        final ModelType m = getModel().getModelType();
        return m == ModelType.STRING;
    }

}
